/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.uoc.tdp.pac3.bo;

import edu.uoc.tdp.pac3.domain.Area;
import edu.uoc.tdp.pac3.domain.Request;
import edu.uoc.tdp.pac3.domain.RequestNote;
import edu.uoc.tdp.pac3.domain.RequestType;
import edu.uoc.tdp.pac3.domain.User;
import edu.uoc.tdp.pac3.to.HistoricIncidenciaTO;
import java.rmi.RemoteException;
import java.util.Date;
import java.util.List;

/**
 *
 * @author Gerard
 */
public interface IIncidenciaBO {

    /**
     * Dona d'alta una nova incidencia
     * @param request
     * @return
     * @throws RemoteException 
     */
    boolean novaIncidencia(Request request) throws RemoteException;
    /**
     * modifica una incidencia
     * @param request
     * @param rqNote
     * @return si ha anat bé la gravació a la BD
     * @throws RemoteException 
     */
    boolean modificarIncidencia(Request request, RequestNote rqNote) throws RemoteException;

    /**
     * retorna una llista de incidencies actives
     * @return llista de incidencies actives
     * @throws RemoteException 
     */
    List<Request> getIncidenciesActives() throws RemoteException;

    /**
     * Retorna una llista de incidencies resoltes
     * @return llista de incidencies inactives
     * @throws RemoteException 
     */
    List<Request> getIncidenciesResoltes() throws RemoteException;
    /**
     * Retorna una llista de incidencies
     * @param date
     * @return
     * @throws RemoteException 
     */
    List<Request> getIncidencies(Date date) throws RemoteException;

    /**
     * Resol una incidencia determinada
     * @param request
     * @return si ha anat bé la gravació
     * @throws RemoteException 
     */
    boolean resoldreIncidencia(Request request) throws RemoteException;
    
    /**
     * Resol una incidencia determinada
     * @param idRequest
     * @param idUserNote
     * @param userNote
     * @return si ha anat bé la gravació.
     * @throws RemoteException 
     */
    boolean resoldreIncidencia(Integer idRequest, Integer idUserNote, String userNote) throws RemoteException;

    /**
     * Retorna la llista de historics (request + requestNotes associades)
     * @param requestType
     * @return llista de historics
     * @throws RemoteException 
     */
    List<HistoricIncidenciaTO> getHistorics(RequestType requestType) throws RemoteException;
    
    /**
     * Retorna els usuaris de la BD
     * @return llista de usuaris
     * @throws RemoteException 
     */
    List<User> getUsers() throws RemoteException;
    
    /**
     * Retorna totes els Espais que hi ha a la BD
     * @return llista de Area
     * @throws RemoteException 
     */
    List<Area> getAreas() throws RemoteException;
    
    /**
     * Metode que retorna una llista de notes relacionades amb una peticio
     * @param request
     * @return Llista de notes relacionades amb una peticio
     * @throws RemoteException 
     */
    List<RequestNote> getRequestNoteFromRequest(Request request) throws RemoteException;
    
}
